// ignore_for_file: slash_for_doc_comments, non_constant_identifier_names

import 'dart:convert';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'common.dart';

Directory? _appDocDir;
String? _appDocPath;
String _configFileName = 'config';

//
Map<String, dynamic> _config = {
  'ver': 1.0,
  'language': '',
  'userName': '',
  'nickName': '',
  'phone': '',
  'email': '',
  'accessToken': '',
  'refreshToken': '',

  // 百度申请到的AK
  'ak': '990i9LE50GKRXplOZylGMUguAdfWDN3M'

  //...
};

/**
 * 获取本地已读取的配置信息，如果为空，建议用户重新登陆
 */
Map<String, dynamic> dq_configInfo() {
  return _config;
}

/**
 * 从用户本地文件系统中获取用户配置信息，如果有的话，如果没有则会跳转到登陆界面
 */
Future<Map<String, dynamic>?>? dq_getConfig() async {
  _appDocDir ??= await getApplicationDocumentsDirectory();
  _appDocPath ??= _appDocDir?.path;

  File file = File('$_appDocPath/$_configFileName');
  if (!await file.exists()) {
    // ignore: use_build_context_synchronously
    LOGI('config is empty!!');
    return null;
  }
  var context = await file.readAsString();

  if (context.isNotEmpty) {
    try {
      _config = json.decode(context);
    } catch (e) {
      LOGI('解析配置文件异常');
      dq_delConfig();
      return null;
    }
  }

  return _config;
}

/**
 * 保存配置到文件 
 */
void dq_saveConfig() async {
  _appDocDir ??= await getApplicationDocumentsDirectory();
  _appDocPath ??= _appDocDir?.path;

  File file = File('$_appDocPath/$_configFileName');

  await file.writeAsString(json.encode(_config), mode: FileMode.write);
  LOGI('save config');
}

/**
 * 删除本地保留的配置，主要用于退出账号或者切换账号时使用
 */
void dq_delConfig() async {
  _appDocDir ??= await getApplicationDocumentsDirectory();
  _appDocPath ??= _appDocDir?.path;

  File file = File('$_appDocPath/$_configFileName');

  if (!await file.exists()) {
    return;
  }

  file.delete();
  LOGI('del config');
}

List<Map<String, dynamic>?> _docInfo = [];

/**
 * 保留的文档
 */
List<Map<String, dynamic>?> dq_getDocInfo() {
  return _docInfo;
}
